package com.example.netty.netty.dubboRPC.netty;

import com.example.netty.netty.dubboRPC.provider.HelloServiceImple;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

/**
 * @Author: 江涛
 * @CreateTime: 2022-09-22  21:06
 * @Description:
 */
public class NettyServerHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        System.out.println("成功接收参数:"+msg.toString());
        //接受客户端信息，并执行方法
        //应该定义自己的通讯协议来防止粘包拆包，这里直接简单的判断是否以HelloServer-hello#开头,方法名等其他信息校验也是同理
        String s = msg.toString();
        if (s.startsWith("HelloServer-hello#")) {
            //执行方法(每次斗产生一个新实例去执行，可以考虑容器化处理)
            String result = new HelloServiceImple().hello(s.substring(s.indexOf("#") + 1));
            System.out.println("回送结果："+result);
            //回送结果
            ctx.writeAndFlush(result);
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.close();
    }
}
